多角度展现 Linux 集群之美
在很长一段时间内,开发和运维的工作泾渭分明、互不干涉,只有在系统出现故障时,双方才会认真地打个照面,长此以往,摩擦和误会必然存在。
此时,有经验的运维工程师会考虑将一部分手动工作脚本化,以减少人为操作失误,从而提高工作效率;而有经验的开发工程师会考虑将自己的系统变得更加友好,以降低事故率和缩短排查时间。
随着时间的推移,产品的用户量越来越大,单机单体的架构已经不足以支撑海量请求,工程师们开始考虑用分布式服务集群来缓解单机压力。至此,微服务架构应运而生。围绕着微服务架构有很多技术,比如统一网关、注册中心与服务发现、负载均衡等。
此时,优秀的开发和运维工程师们又开始考虑另一个问题:现在的服务越来越多,版本发布越来越频繁,非常容易出现人为故障,系统也总处于不稳定的状态,我们该如何优化整个交付流程呢?
DevOps 正是解决该问题的良方,它打破了开发、测试与运维之间的壁垒,将整个 CI&CD 流水线化、智能化。
但这还不够,对于大规模微服务架构,我们可能会更进一步关注资源与效率问题,比如服务(或机器)能否弹性扩容,能否在资源出现异常时有足够的韧性提供持续服务等。
随着云计算、容器化、微服务框架等技术的发展,业界提出了云原生架构。它旨在将系统中的非核心业务代码剥离出来,让 IaaS 和 PaaS 接管,而在实现 CI&CD 时,直接通过 Docker 镜像进行交付,配以 Kubernetes 进行容器编排,让整个应用服务处于灵活部署、灵活扩展且资源可检测的状态。
可以看到,在技术架构不断演进的过程中,运维工程师所需的能力栈也在发生变化。从最开始的手工运维到脚本化运维,再到基于云原生架构的自动化运维,运维工程师逐渐将触角延伸到开发领域,最终和开发人员共同承担系统稳定性保障的责任,这其实非常考验工程师的综合能力。
那么如何系统学习,掌握以上这些能力呢?推荐你阅读这本《 Linux 集群之美》
本书内容基本能涵盖一名优秀工程师应该掌握的所有运维技能(不仅限于运维工程师)。不仅覆盖了 Python 开发、 Linux 集群负载(LVS、HAProxy、Nginx 等)等基础内容,还包含了云原生微服务架构下的 Kubernetes、Service Mesh 服务网格 Istio 等前沿技术。
同时,作者还用亲身经历的亿级流量系统来讲解高并发系统的架构该如何设计。书中提供的 Python 程序均来自真实项目,可以直接借用。关于 Linux 集群的项目实践和 MySQL 的高可用方案,大家也可以根据实际项目的需求直接用于公司的网站架构。
目标读者
系统工程师或运维工程师
系统工程师和运维工程师可以重点关注第4~7章的内容,这些都是与运维工作息息相关的,建议大家多花些精力和时间,从线上环境去考虑学习。
DevOps工程师
DevOps 工程师可以重点关注第2~8章的内容,想在企业运维开发工作中开发高效的运维工具并不是一件很容易的事情,建议大家多学习,拓宽自己的知识面。
系统开发工程师
对于开发人员来说,由于已具备很强的编程开发能力,可以重点关注第2章和第3章之外的章节,以提升自己的技术。
运维架构师
运维架构师可以重点关注第4~5章和第7~8章的内容,这些都跟系统/网站架构技术息息相关,而且基本上都出自真实项目经验,具备一定的参考意义。
网络管理员或企业网管
本书是对实际工作经验的总结,涉及大量的知识点和专业术语,建议经验还不是很丰富的读者先了解第1~2章的内容,如果大家在学习过程中根据这两章的讲解进行操作,定会达到事半功倍的效果。
本书特色
基于真实的电子商务系统和CDN系统着重介绍了 Nginx/HAProxy+Keepalived 、 LVS+Keepalived/DR 及 DNS 轮询等常见的 Web 集群负载均衡高可用技术,除此之外,还介绍了 ZooKeeper 集群在分布式系统中的应用。
MySQL 高可用架构目前主要是以 MySQL 5.7 为主,书中针对 DRBD+Heartbeat 、 MySQL MHA 及基于 GTID 的 MySQL 主从复制工具 mysql-utilities 进行了详细说明。
基于笔者目前维护的容器云平台(包括 Kubernetes 和 Mesos 集群)介绍云原生环境下的负载均衡技术的具体实现,例如 HAProxy、IPVS 及 Ingress-Controller 等,重点介绍了 Nginx/Traefik Ingress-Controller 在 Kubernetes 集群系统中的部署和应用。
以笔者维护过的千万级/亿级 PV 高并发高流量网站架构为例来说明网站的系统架构设计,并且分享了秒杀系统的架构设计思想。
关于作者
余洪春(抚琴煮酒)
高级 DevOps 、系统架构师 ,从事电子商务网站和大型 CDN 系统运维、架构设计工作十余年,在 Linux 集群、自动化运维、Kubernetes/Mesos云原生平台及高并发高流量网站架构设计等方面有深入研究,通过大量一线实践积累了丰富的经验,精通负载均衡高可用技术、DevOps 及容器技术等。51CTO 和 ChinaUnix 等知名社区的特邀专家,51CTO 系统网络频道的专栏作家,ChinaUnix 论坛“集群和高可用”及“监控及自动化运维”版版主,在社区内发表了大量技术文章,深受网友好评。
本书结构
第1章 Linux集群基础概念 1
1.1 Linux集群涉及的核心概念及常用软件 2
1.1.1 什么是负载均衡高可用 2
1.1.2 什么是服务发现 3
1.1.3 以LVS作为负载均衡器 4
1.1.4 以Nginx作为负载均衡器 9
1.1.5 以HAProxy作为负载均衡器 10
1.1.6 高可用软件Keepalived 10
1.1.7 高可用软件Heartbeat 11
1.1.8 高可用块设备DRBD 11
1.2 负载均衡关键技术 13
1.2.1 负载均衡算法 13
1.2.2 Session共享和会话保持 17
1.3 负载均衡器的会话保持机制 19
1.3.1 负载均衡器的会话保持处理机制 19
1.3.2 LVS的持久连接机制 20
1.3.3 Nginx负载均衡器的ip_hash算法 24
1.3.4 HAProxy负载均衡器的source算法 25
1.3.5 基于cookie的会话保持处理机制 29
1.4 服务器健康检测 33
1.5 L4和L7负载均衡器对比 34
1.6 集群内(外)负载均衡 34
1.7 软件级负载均衡器的特点介绍与对比 35
1.8 小结 36
第2章 Python的基础概念及进阶知识 37
2.1 Python语言的应用领域 37
2.2 选择Python的原因 39
2.3 Python的版本说明 40
2.4 如何高效地进行Python开发工作 40
2.4.1 IPython的功能介绍 40
2.4.2 利用virtualenv隔离项目 46
2.4.3 PyCharm简介 47
2.5 Python基础知识介绍 51
2.5.1 正则表达式的应用 51
2.5.2 Python程序的构成 58
2.5.3 Python的编码问题 60
2.5.4 使用Python解析JSON 63
2.5.5 Python异常处理与程序调试异常 64
2.5.6 Python函数 67
2.5.7 Python的面向对象 79
2.5.8 Python的多进程和多线程 91
2.5.9 Python协程 105
2.6 小结 109
第3章 Python在Linux集群中的实践应用 110
3.1 Python经常用到的第三方类库 110
3.2 工作中常用的Python脚本 111
3.2.1 利用Python比较应用 111
3.2.2 利用Python获取数据库证书并替换成文件字符串 112
3.2.3 利用Python处理JSON式文件 113
3.3 利用Flask Web框架设计RESTful API 114
3.3.1 后端开发工作中为什么要使用RESTful API 114
3.3.2 项目实战 117
3.4 利用Nginx+Gunicorn+Flask部署Python项目 119
3.5 利用Flask+ Gevent搭建webssh 128
3.6 小结 137
第4章 轻量级自动化运维工具Fabric介绍 138
4.1 Vagrant简介 139
4.1.1 Vagrant的安装 139
4.1.2 使用Vagrant配置本地开发环境 141
4.1.3 使用Vagrant搭建本地开发环境 148
4.1.4 使用Vagrant搭建分布式环境 153
4.2 轻量级自动化运维工具Fabric 162
4.2.1 Paramiko版本库简介 162
4.2.2 Fabric的安装 164
4.2.3 Fabric的命令行入口fab命令详解 165
4.2.4 Fabric的环境变量设置 166
4.2.5 Fabric的核心API 167
4.2.6 Fabric的执行逻辑 171
4.3 Fabric在工作中的应用实例 173
4.3.1 开发环境中的Fabric应用实例 173
4.3.2 工作场景中常见的Fabric应用实例 174
4.4 Fabric在性能方面的不足 180
4.5 小结 180
第5章 Linux集群项目案例 181
5.1 Linux集群的项目案例详解 181
5.1.1 项目案例一:LVS在项目中的优化设计思路 181
5.1.2 项目案例二:用Nginx+Keepalived实现在线票务系统 184
5.1.3 项目案例三:企业级Web负载均衡高可用之Nginx+Keepalived 188
5.1.4 项目案例四:HAProxy双机高可用方案HAProxy+Keepalived 198
5.2 利用HAProxy代理WebSocket集群 203
5.3 巧用DNS轮询进行负载均衡 206
5.4 利用ZooKeeper集群来搭建分布式系统 211
5.5 小结 218
第6章 云原生环境下的负载均衡实现 219
6.1 私有化部署Kubernetes集群 220
6.1.1 部署Kubernetes集群环境的准备工作 220
6.1.2 Nexus3私有仓库在集群内的暴露使用 221
6.1.3 部署Kubernetes集群 222
6.1.4 Kubernetes集群数据如何持久化 228
6.2 负载均衡的具体实现 232
6.2.1 以iptables作为集群的负载均衡 232
6.2.2 以IPVS作为集群的负载均衡 241
6.2.3 服务发现 243
6.2.4 Ingress-Controller的介绍 245
6.3 小结 264
第7章 MySQL高可用集群项目案例 265
7.1 MySQL数据库的安装 265
7.2 服务器物理硬件的选择 267
7.3 MySQL数据库的优化 267
7.4 MySQL主从复制流程与原理 270
7.5 MySQL主从复制的搭建 271
7.5.1 MySQL主从复制环境介绍 271
7.5.2 影响MySQL主从复制的配置选项 272
7.5.3 MySQL主从复制的实现过程 273
7.6 MySQL MHA集群案例 274
7.6.1 MHA安装前的准备工作 275
7.6.2 源码安装MHA程序 276
7.6.3 MHA的实际安装和部署流程 277
7.6.4 MHA manager的压测 284
7.6.5 设置MHA manager为守护进程 290
7.7 MySQL DRBD高可用案例 291
7.7.1 MySQL DRBD相关组件原理介绍 292
7.7.2 MySQL DRBD的具体搭建过程 293
7.7.3 MySQL SysBench的基准测试 308
7.8 利用mysql-utilities工具自动切换主从复制 308
7.8.1 基于GTID的主从复制 308
7.8.2 mysql-utilities工具的二次开发 318
7.9 用XtraBackup工具备份和恢复数据库 319
7.9.1 XtraBackup的安装过程 319
7.9.2 XtraBackup的运行原理 319
7.9.3 XtraBackup备份及恢复过程 321
7.10 小结 322
第8章 高可用高并发系统架构设计 323
8.1 系统性能评估指标 323
8.2 网站架构设计规划预案 324
8.2.1 合理设计与规划 324
8.2.2 核心系统的开发设计 325
8.2.3 规划好网站未来的发展 325
8.2.4 合理选用开源软件方案 326
8.2.5 机房及CDN选型 326
8.2.6 CI/CD及蓝绿部署发布 327
8.2.7 系统安全问题 327
8.3 千万级PV、高性能、高并发网站的架构设计 328
8.4 亿级PV、高性能、高并发网站的架构设计 332
8.5 秒杀系统的架构设计 339
8.6 小结 343
第9章 Linux集群的总结和思考 344
9.1 集群与分布式系统的区别 344
9.2 了解微服务及其组件 346
9.3 现阶段如何保证高可用 349
9.4 小结 351
附录A Docker进阶操作总结 352
附录B 利用Nexus3配置CI/CD的私有仓库 358
附录C XtraBackup备份工具的详细测试 365
上下滑动查看
最后,希望大家能通过本书掌握 Linux 集群的精髓,领会 Linux 集群的魅力,通过 Python 程序实现自动化运维和编程,从而轻松愉快地工作。
扫码关注【CSAPP】视频号
书讯 | 12月书讯(上) | 冬夜寒冷,读书暖心,华章科技上新啦!书讯 | 12月书讯(下) | 冬夜寒冷,读书暖心,华章科技上新啦!
资讯 | IEEE发布2022年科技趋势全球调研:人工智能和机器学习、云计算及5G将成为下一年最重要的技术书单 | 8本书助你零基础转行数据分析岗干货 | 周志明论架构之道:后微服务时代与无服务时代收藏 | 盘点云原生的5大特征上新 | 【新书速递】Django3.0应用开发详解